using System.Text.Json;

namespace demo001
{
    /// <summary>
    /// App 类是应用程序的根类，继承自 Application
    /// 负责应用程序的生命周期管理和全局资源配置
    /// </summary>
    public partial class App : Application
    {
        /// <summary>
        /// App 类的构造函数
        /// 负责初始化应用程序，配置导航路由，设置主页面
        /// </summary>
        public App()
        {
            // 初始化应用程序组件
            InitializeComponent();

            // 注册导航路由，用于页面导航
            // 将页面名称与对应的页面类型关联，使得可以通过名称进行导航
            Routing.RegisterRoute(nameof(MainPage), typeof(MainPage));
            Routing.RegisterRoute(nameof(LoginPage), typeof(LoginPage));

            // 设置应用的主页面为AppShell
            // AppShell 提供了应用程序的导航框架
            MainPage = new AppShell();
        }

        /// <summary>
        /// 应用程序启动时的事件处理方法
        /// 在应用程序完全启动时被调用
        /// </summary>
        protected override void OnStart()
        {
            // 调用基类的OnStart方法
            base.OnStart();

            // 应用启动时检查更新
            CheckForUpdates();
        }

        /// <summary>
        /// 检查应用程序更新的异步方法
        /// 连接服务器获取最新版本信息，并在有更新时提示用户
        /// </summary>
        private async void CheckForUpdates()
        {
            try
            {
                // 创建HttpClient实例用于发送HTTP请求
                using var client = new HttpClient();
                // 发送GET请求获取版本信息
                var response = await client.GetAsync("http://your-api-url/api/version");

                if (response.IsSuccessStatusCode)
                {
                    // 读取响应内容流
                    using var contentStream = await response.Content.ReadAsStreamAsync();
                    // 反序列化响应内容为VersionInfo对象
                    var result = await JsonSerializer.DeserializeAsync<VersionInfo>(contentStream);
                    // 获取当前应用版本
                    var currentVersion = VersionTracking.CurrentVersion;

                    // 比较服务器版本与当前版本
                    if (result?.Version != currentVersion)
                    {
                        // 显示更新提示对话框，询问用户是否更新
                        bool update = await MainPage.DisplayAlert("更新程序", 
                            "存在一个新的版本.是否更新?", "Yes", "No");
                        
                        if (update)
                        {
                            // 实现更新逻辑
                            // 这里可以包含下载新包并安装
                            // 或者重定向用户到应用商店
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // 记录错误但不显示给用户，便于调试
                System.Diagnostics.Debug.WriteLine($"Update check failed: {ex.Message}");
            }
        }
    }

    /// <summary>
    /// VersionInfo 类用于存储版本信息
    /// 用于序列化和反序列化版本信息数据
    /// </summary>
    public class VersionInfo
    {
        /// <summary>
        /// 版本号属性
        /// 存储应用程序的版本号信息
        /// </summary>
        public string Version { get; set; } = "";
    }
}